[小ネタ] AWS Tools for PowerShellの認証情報を移行する
しばたです。
つい先日故障のため仕事で使っているPCを交換したのですが、その際にAWS Tools for PowerShellのプロファイル情報を移行するのに少しハマったので知見を共有します。
AWS Tools for PowerShellの認証情報
AWS Tools for PowerShellではプロファイルなどの認証情報をユーザープロファイル配下に保存します。
例えばWindowsの既定では[ユーザープロファイル(C:\Users\ユーザー名)]\AppData\Local\AWSToolkit\RegisteredAccounts.json
に保存されています。
このRegisteredAccounts.json
は下図の様に内容が暗号化されて保存されています。
認証情報の移行
このRegisteredAccounts.json
の情報をほかのマシンに移せば認証情報を移行できるはずなのですが、単純にファイルをコピーして移動するだけでは移行できませんでした。
具体的な暗号化方式まではわかりませんでしたがRegisteredAccounts.json
は別マシンでは復号化できない様です。
(例えば.NET FrameworkのSecureStringクラスもマシンを超えて復号化できないのでAWS Tools for PowerShellもそういうものなのでしょう)
このためAWS Tools for PowerShellの認証情報を別マシンに移行するにはひと手間かけてやる必要があります。
認証情報の復号化
当たりといえば当たり前ですが、AWS Tools for PowerShellに保存されている認証情報は同一マシン内であれば復号可能です。
Get-AWSCredential
コマンドレットを使うとAmazon.Runtime.BasicAWSCredentials
型の認証情報が取得でき、このクラスにはGetCredentials()
メソッドがあり、これを使うと保存されているアクセスキーやシークレットキーの中身を参照することができます。
# プロファイルに登録されている情報を参照する例
$awsCred = Get-AWSCredential -ProfileName "プロファイル名"
$awsCred.GetCredentials()
これを応用し、以下の様にすると端末に登録されているすべてのプロファイルのアクセスキーとシークレットキーを取得することができます。
Get-AWSCredential -ListProfileDetail | ForEach-Object {
$cred = (Get-AWSCredential -ProfileName $_.ProfileName).GetCredentials()
[PSCustomObject]@{
ProfileName = $_.ProfileName
AccessKey = $cred.AccessKey
SecretKey = $cred.SecretKey
}
}
認証情報を移行する
ここまでわかればもうひと工夫して以下の様にすると取得した認証情報を再登録するSet-AWSCredential
コマンドレットのコマンドラインを自動生成することができます。
Get-AWSCredential -ListProfileDetail | ForEach-Object {
$cred = (Get-AWSCredential -ProfileName $_.ProfileName).GetCredentials()
("Set-AWSCredential -AccessKey {0} -SecretKey {1} -StoreAs {2}" -f $cred.AccessKey, $cred.SecretKey, $_.ProfileName)
}
このコマンド文字列を移行先のマシンで実行すれば無事認証情報を移行することができます。
# 出力されたコマンド文字列移行先マシンで実行して認証情報を移行する
Set-AWSCredential -AccessKey AKI123456789 -SecretKey asdfghjklkkhhiu -StoreAs test-profile1
Set-AWSCredential -AccessKey AKI223456789 -SecretKey wertyuiop@egete -StoreAs test-profile2
Set-AWSCredential -AccessKey AKI323456789 -SecretKey cxvbnmyuhjkl6uk -StoreAs test-profile3
最後に
ざっとこんな感じで認証情報を移行できます。
環境によってはコマンドライン文字列の生成をもう少し頑張る必要があるかもしれませんがさほど難しいことにはならないでしょう。
本記事の内容が誰かの役に立てば幸いです。